package com.gitee.huanminabc.dynamicdb.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.HashMap;
import java.util.Map;
/**
 * @author huanmin
 * @date 2024/12/09
 */
@Data
@ConfigurationProperties(prefix = "spring.datasource")
public class DynamicDbSpringConfig {
    /**
     * 默认数据源的key
     */
    private String defaultDbKey;
    /**
     * 默认租户
     */
    private String defaultTenant;

    /**
     * 是否启动数据库加载数据源 (非必选) 优先级大于配置文件
     */
    private boolean databaseLoadActivate = false;

    /**
     * 初始化数据原资源目标库 (非必选)
     */
    private String databaseLoadKey = defaultDbKey;

    /**
     * 是否启动数据库加载租户 (非必选) 优先级大于配置文件
     */
    private  boolean multiTenantLoadActivate=false;

    /**
     * 初始化租户资源目标库 (非必选)
     */
    private  String multiTenantLoadKey;


    /**
     * 在有些场景下有多个系统,但是分多个数据库, 表都是一样的, 那么就需要根据分组来自动路由
     * 比如A系统有一个base数据库, B系统也有一个base数据库 , 那么就需要有一个标识来确定实际代码需要去哪个地方找
     */
    private  boolean multiTenantMode=false;


    @Data
    public static class MultiDbDataSource {
        private String url;
        private String username;
        private String password;
        private String driverClassName;
        private String type;
    }

    /**
     * 多数据源
     */
    private Map<String, MultiDbDataSource> multiDb = new HashMap<>();

    /**
     * 多租户
     */
    private Map<String, Map<String,String>> tenants = new HashMap<>();


    /**
     * 获取租户对应的数据源
     * @param tenantKey
     * @param key
     * @return
     */
    public String getTenantDb(String tenantKey, String key) {
        return tenants.getOrDefault(tenantKey, new HashMap<>()).get(key);
    }

}
